package com.flying.poly;


/**
 * @ClassName:
 * @author: flying
 * @date 2024 2024/12/12 09:05
 * @Description: 多态的使用
 */
public class PolyTest {
    public static void main(String[] args) {


        /*
          多态的前提：继承关系
          多态在代码中的体现：父类引用指向了一个子类对象
          多态的意义：
                子类重写（实现）父类的方法，让不同的子类对象调用相同的代码得到不同的结果，提高了代码灵活性

          多态的特点：
                1. 属性与多态无关，编译和运行时都看左边声明的类型
                2. 方法编译时，看等号左边声明的类型，方法运行时，看等号右边对象的具体类型


         */

        Person user = new Student();

        user.setId(1);
        user.setName("百里守约");
        user.setAge(11);

        user.sleep();


        /*  !!!!!
         如果父类空间,是通过创建对象初始化的
         访问属性找父类,调用方法找子类
         如果是静态属性或方法,都找父类
        */

        /*

         */


        /*
        类的初始化
        1. 给静态成员变量设置默认值
        2. 执行静态代码块，给静态变量赋值


         */



        /*
        对象的初始化
        1. 给成员变量设置默认值 :   int m = 0;
        2. 执行super()方法，初始化父类空间
            2.1 初始化父类空间
                  1. 给静态成员变量设置默认值    static int i = 0;
                  2. 执行静态代码块，给静态变量赋值  static int i= 888;
                  初始化父类对象：
                  1.  给成员变量设置默认值 : int m = 0;
                  2. 调用super():
                           Object类的super()方法
                  3. 执行初始化代码块，给成员变量赋值（代码顺序依次执行）:
                                int m = 5;
                                System.out.println("base");
                  4.  执行父类构造器的其他代码
                            System.out.println("base里的this = "+ this);
                            TODO：
                                多态中，父类构造器中的this指向正在初始化的子类对象
                            this.method( i: 100);-··．·调用子类的method方法
                            test();
                            System.out.println("Base里的this.m="+this.m);
                            System.out.println("Base里的this.i="+ this.i);
        3. 执行初始化代码块，给成员变量赋值
                System.out.println("sub")
        4.执行构造器的其他代码
                   super.method( i: 70); -->  System.out.println("base·: "+i);} -->
         */


//        Base x=new Sub();
        Base x = new Base();
    }


}
